package com.imstlife.vending.utils;

import android.graphics.Bitmap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import java.util.Hashtable;

public class QrCodeUtil {

	public static Bitmap generateQrCode(String url, int widthAndHeight) {
		Bitmap bitmap = null;
		try {
			// 判断URL合法性
			if (url == null || "".equals(url) || url.length() < 1) {
				return bitmap;
			}

			Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

			// 图像数据转换，使用了矩阵转换
			BitMatrix bitMatrix = new QRCodeWriter().encode(url,
					BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight,
					hints);
			int[] pixels = new int[widthAndHeight * widthAndHeight];
			// 下面这里按照二维码的算法，逐个生成二维码的图片，
			// 两个for循环是图片横列扫描的结果
			for (int y = 0; y < widthAndHeight; y++) {
				for (int x = 0; x < widthAndHeight; x++) {
					if (bitMatrix.get(x, y)) {
						pixels[y * widthAndHeight + x] = 0xff000000;
					} else {
						pixels[y * widthAndHeight + x] = 0xffffffff;
					}
				}
			}
			// 生成二维码图片的格式，使用ARGB_8888
			bitmap = Bitmap.createBitmap(widthAndHeight, widthAndHeight,
					Bitmap.Config.RGB_565);
			bitmap.setPixels(pixels, 0, widthAndHeight, 0, 0, widthAndHeight,
					widthAndHeight);

		} catch (WriterException e) {
			e.printStackTrace();
		}

		return bitmap;
	}
}
